iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0

昨天介紹到為什麼要封裝、封裝的好處及package / import今天就再繼續介紹其他封裝技術!

存取修飾元

https://ithelp.ithome.com.tw/upload/images/20231002/20163139mfAG9U4hfc.png

private:

當前類別的存取權限,只可以在同一個類別存取,不可以在子類別存取。
一般而言,設計類別時,建議實體變數(instance variable)設定為 private權限,再透過方法來存取資料 (如getter/setter方法)

default(沒有使用存取修飾元):

套件的存取權限,預設範圍是同一個類別和套件中存取,但不包含不同套件的子類別

protected:

子類別的存取權限,可以在同一個類別、其子類別或同一套件中存取,包含不同套件

使用protected來修飾方法,通常希望其子類別來覆寫這個方法

public:

公共的存取權限,適用全域範圍,任何類別都可以存取,包含子類別。

https://ithelp.ithome.com.tw/upload/images/20231002/20163139HAdL5hfPIH.png

public class Person {
	//只能在Person類別內才可以操作存取,在Person 之外只能透過對應的getter setter方法操作存取
	private String name;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		
		if(name.length() > 6 || name.length() < 2 ) {
			
			System.out.println("您設置的人名不符合要求");
			return;
			
		}else {
			
			this.name = name;
		}
		
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		
		if(age > 100 || age < 0) {
			
			System.out.println("您設置的年齡不符合要求");
			return;
			
		}else {
			
			this.age = age;
			
		}
	}
}
public class PersonDemo {

	public static void main(String[] args) {
		Person person = new Person();
		//person.age = 1000; //變數已被隱藏,出現編譯錯誤
		person.setAge(1000);//您設置的年齡不符合要求
		person.setAge(30);
		System.out.println("設置成功年齡為:" + person.getAge());
		
		person.setName("小明");
		System.out.println("設置成功名字為:" + person.getName());
		
		
	}
}

修飾外部類別

最外層的類別定義、與檔名同名的那個類別,只能用public 和default不能用protected或private修飾。

因爲外部類別沒有處於任何類別的內部,protected或private對外部類別沒有意義

方法變數(區域變數)不能使用存取修飾子

因為沒有意義,區域變數的存取已經由本身所屬的方法決定了

在一個檔案定義多個類別:

在一個.java檔中,我們可以定義多個class,方便我們完成所需要的功能。

以Human.java為例;

class Human{
    // code..
}
class Animal{
    // code...
}

這樣是可以的,編譯後會產生Human.class及Animal.class兩個類別檔。
但現在我們要討論修飾元的部份,我們很清楚外部的的類別只能用或public修飾。
以Human.java來說:

public class Human{
    // code...
}
class Animal{
    // code...
}

上面這樣的寫法可以,但如果寫成以下的程式碼

class Human{
    // code...
}
public class Animal{  //編譯錯誤
    // code...
}

就會出現編譯錯誤的訊息:The public type Animal must be defined in its own file

也就是說,要用public修飾的外部類別,只能是『與檔名相同』的那個類別。

今天就先到這邊明天繼續封裝part3唷!


上一篇
Day 16 封裝(Encapsulation)I
下一篇
Day 18 封裝(Encapsulation)III
系列文
玩轉Java:從基礎打造你的程式超能力30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言